package util

import (
	"os"
	"path/filepath"
	"strings"
)

var allMimeMap = map[string]string{
	".323":                    "text/h323",
	".3g2":                    "video/3gpp2",
	".3gp":                    "video/3gpp",
	".3gp2":                   "video/3gpp2",
	".3gpp":                   "video/3gpp",
	".7z":                     "application/x-7z-compressed",
	".aa":                     "audio/audible",
	".AAC":                    "audio/aac",
	".aaf":                    "application/octet-stream",
	".aax":                    "audio/vnd.audible.aax",
	".ac3":                    "audio/ac3",
	".aca":                    "application/octet-stream",
	".accda":                  "application/msaccess.addin",
	".accdb":                  "application/msaccess",
	".accdc":                  "application/msaccess.cab",
	".accde":                  "application/msaccess",
	".accdr":                  "application/msaccess.runtime",
	".accdt":                  "application/msaccess",
	".accdw":                  "application/msaccess.webapplication",
	".accft":                  "application/msaccess.ftemplate",
	".acx":                    "application/internet-property-stream",
	".AddIn":                  "text/xml",
	".ade":                    "application/msaccess",
	".adobebridge":            "application/x-bridge-url",
	".adp":                    "application/msaccess",
	".ADT":                    "audio/vnd.dlna.adts",
	".ADTS":                   "audio/aac",
	".afm":                    "application/octet-stream",
	".ai":                     "application/postscript",
	".aif":                    "audio/aiff",
	".aifc":                   "audio/aiff",
	".aiff":                   "audio/aiff",
	".air":                    "application/vnd.adobe.air-application-installer-package+zip",
	".amc":                    "application/mpeg",
	".anx":                    "application/annodex",
	".apk":                    "application/vnd.android.package-archive",
	".application":            "application/x-ms-application",
	".art":                    "image/x-jg",
	".asa":                    "application/xml",
	".asax":                   "application/xml",
	".ascx":                   "application/xml",
	".asd":                    "application/octet-stream",
	".asf":                    "video/x-ms-asf",
	".ashx":                   "application/xml",
	".asi":                    "application/octet-stream",
	".asm":                    "text/plain",
	".asmx":                   "application/xml",
	".aspx":                   "application/xml",
	".asr":                    "video/x-ms-asf",
	".asx":                    "video/x-ms-asf",
	".atom":                   "application/atom+xml",
	".au":                     "audio/basic",
	".avi":                    "video/x-msvideo",
	".axa":                    "audio/annodex",
	".axs":                    "application/olescript",
	".axv":                    "video/annodex",
	".bas":                    "text/plain",
	".bat":                    "text/plain",
	".bcpio":                  "application/x-bcpio",
	".bin":                    "application/octet-stream",
	".bmp":                    "image/bmp",
	".c":                      "text/plain",
	".cab":                    "application/octet-stream",
	".caf":                    "audio/x-caf",
	".calx":                   "application/vnd.ms-office.calx",
	".cat":                    "application/vnd.ms-pki.seccat",
	".cc":                     "text/plain",
	".cd":                     "text/plain",
	".cdda":                   "audio/aiff",
	".cdf":                    "application/x-cdf",
	".cer":                    "application/x-x509-ca-cert",
	".cfg":                    "text/plain",
	".chm":                    "application/octet-stream",
	".class":                  "application/x-java-applet",
	".clp":                    "application/x-msclip",
	".cmd":                    "text/plain",
	".cmx":                    "image/x-cmx",
	".cnf":                    "text/plain",
	".cod":                    "image/cis-cod",
	".config":                 "application/xml",
	".contact":                "text/x-ms-contact",
	".coverage":               "application/xml",
	".cpio":                   "application/x-cpio",
	".cpp":                    "text/plain",
	".crd":                    "application/x-mscardfile",
	".crl":                    "application/pkix-crl",
	".crt":                    "application/x-x509-ca-cert",
	".cs":                     "text/plain",
	".csdproj":                "text/plain",
	".csh":                    "application/x-csh",
	".csproj":                 "text/plain",
	".css":                    "text/css",
	".csv":                    "application/csv",
	".cur":                    "application/octet-stream",
	".cxx":                    "text/plain",
	".dat":                    "application/octet-stream",
	".datasource":             "application/xml",
	".dbproj":                 "text/plain",
	".dcr":                    "application/x-director",
	".def":                    "text/plain",
	".deploy":                 "application/octet-stream",
	".der":                    "application/x-x509-ca-cert",
	".dgml":                   "application/xml",
	".dib":                    "image/bmp",
	".dif":                    "video/x-dv",
	".dir":                    "application/x-director",
	".disco":                  "text/xml",
	".divx":                   "video/divx",
	".dll":                    "application/x-msdownload",
	".dll.config":             "text/xml",
	".dlm":                    "text/dlm",
	".doc":                    "application/msword",
	".docm":                   "application/vnd.ms-word.document.macroEnabled.12",
	".docx":                   "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
	".dot":                    "application/msword",
	".dotm":                   "application/vnd.ms-word.template.macroEnabled.12",
	".dotx":                   "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
	".dsp":                    "application/octet-stream",
	".dsw":                    "text/plain",
	".dtd":                    "text/xml",
	".dtsConfig":              "text/xml",
	".dv":                     "video/x-dv",
	".dvi":                    "application/x-dvi",
	".dwf":                    "drawing/x-dwf",
	".dwg":                    "application/acad",
	".dwp":                    "application/octet-stream",
	".dxf":                    "application/x-dxf",
	".dxr":                    "application/x-director",
	".eml":                    "message/rfc822",
	".emz":                    "application/octet-stream",
	".eot":                    "application/vnd.ms-fontobject",
	".eps":                    "application/postscript",
	".etl":                    "application/etl",
	".etx":                    "text/x-setext",
	".evy":                    "application/envoy",
	".exe":                    "application/octet-stream",
	".exe.config":             "text/xml",
	".fdf":                    "application/vnd.fdf",
	".fif":                    "application/fractals",
	".filters":                "application/xml",
	".fla":                    "application/octet-stream",
	".flac":                   "audio/flac",
	".flr":                    "x-world/x-vrml",
	".flv":                    "video/x-flv",
	".fsscript":               "application/fsharp-script",
	".fsx":                    "application/fsharp-script",
	".generictest":            "application/xml",
	".gif":                    "image/gif",
	".go":                     "text/plain",
	".gpx":                    "application/gpx+xml",
	".group":                  "text/x-ms-group",
	".gsm":                    "audio/x-gsm",
	".gradle":                 "text/plain",
	".gtar":                   "application/x-gtar",
	".gz":                     "application/x-gzip",
	".h":                      "text/plain",
	".hdf":                    "application/x-hdf",
	".hdml":                   "text/x-hdml",
	".hhc":                    "application/x-oleobject",
	".hhk":                    "application/octet-stream",
	".hhp":                    "application/octet-stream",
	".hlp":                    "application/winhlp",
	".hpp":                    "text/plain",
	".hqx":                    "application/mac-binhex40",
	".hta":                    "application/hta",
	".htc":                    "text/x-component",
	".htm":                    "text/html",
	".html":                   "text/html",
	".htt":                    "text/webviewhtml",
	".hxa":                    "application/xml",
	".hxc":                    "application/xml",
	".hxd":                    "application/octet-stream",
	".hxe":                    "application/xml",
	".hxf":                    "application/xml",
	".hxh":                    "application/octet-stream",
	".hxi":                    "application/octet-stream",
	".hxk":                    "application/xml",
	".hxq":                    "application/octet-stream",
	".hxr":                    "application/octet-stream",
	".hxs":                    "application/octet-stream",
	".hxt":                    "text/html",
	".hxv":                    "application/xml",
	".hxw":                    "application/octet-stream",
	".hxx":                    "text/plain",
	".i":                      "text/plain",
	".ico":                    "image/x-icon",
	".ics":                    "application/octet-stream",
	".idl":                    "text/plain",
	".ief":                    "image/ief",
	".iii":                    "application/x-iphone",
	".inc":                    "text/plain",
	".inf":                    "application/octet-stream",
	".ini":                    "text/plain",
	".inl":                    "text/plain",
	".ins":                    "application/x-internet-signup",
	".ipa":                    "application/x-itunes-ipa",
	".ipg":                    "application/x-itunes-ipg",
	".ipproj":                 "text/plain",
	".ipsw":                   "application/x-itunes-ipsw",
	".iqy":                    "text/x-ms-iqy",
	".isp":                    "application/x-internet-signup",
	".ite":                    "application/x-itunes-ite",
	".itlp":                   "application/x-itunes-itlp",
	".itms":                   "application/x-itunes-itms",
	".itpc":                   "application/x-itunes-itpc",
	".IVF":                    "video/x-ivf",
	".jar":                    "application/java-archive",
	".java":                   "text/plain",
	".jck":                    "application/liquidmotion",
	".jcz":                    "application/liquidmotion",
	".jfif":                   "image/pjpeg",
	".jnlp":                   "application/x-java-jnlp-file",
	".jpb":                    "application/octet-stream",
	".jpe":                    "image/jpeg",
	".jpeg":                   "image/jpeg",
	".jpg":                    "image/jpeg",
	".js":                     "application/javascript",
	".json":                   "application/json",
	".jsx":                    "text/jscript",
	".jsxbin":                 "text/plain",
	".latex":                  "application/x-latex",
	".library-ms":             "application/windows-library+xml",
	".lit":                    "application/x-ms-reader",
	".loadtest":               "application/xml",
	".lpk":                    "application/octet-stream",
	".lsf":                    "video/x-la-asf",
	".lst":                    "text/plain",
	".lsx":                    "video/x-la-asf",
	".lzh":                    "application/octet-stream",
	".m13":                    "application/x-msmediaview",
	".m14":                    "application/x-msmediaview",
	".m1v":                    "video/mpeg",
	".m2t":                    "video/vnd.dlna.mpeg-tts",
	".m2ts":                   "video/vnd.dlna.mpeg-tts",
	".m2v":                    "video/mpeg",
	".m3u":                    "audio/x-mpegurl",
	".m3u8":                   "audio/x-mpegurl",
	".m4a":                    "audio/m4a",
	".m4b":                    "audio/m4b",
	".m4p":                    "audio/m4p",
	".m4r":                    "audio/x-m4r",
	".m4v":                    "video/x-m4v",
	".mac":                    "image/x-macpaint",
	".mak":                    "text/plain",
	".man":                    "application/x-troff-man",
	".manifest":               "application/x-ms-manifest",
	".map":                    "text/plain",
	".master":                 "application/xml",
	".mbox":                   "application/mbox",
	".mda":                    "application/msaccess",
	".mdb":                    "application/x-msaccess",
	".mde":                    "application/msaccess",
	".mdp":                    "application/octet-stream",
	".me":                     "application/x-troff-me",
	".mfp":                    "application/x-shockwave-flash",
	".mht":                    "message/rfc822",
	".mhtml":                  "message/rfc822",
	".mid":                    "audio/mid",
	".midi":                   "audio/mid",
	".mix":                    "application/octet-stream",
	".mk":                     "text/plain",
	".mmf":                    "application/x-smaf",
	".mno":                    "text/xml",
	".mny":                    "application/x-msmoney",
	".mod":                    "video/mpeg",
	".mov":                    "video/quicktime",
	".movie":                  "video/x-sgi-movie",
	".mp2":                    "video/mpeg",
	".mp2v":                   "video/mpeg",
	".mp3":                    "audio/mpeg",
	".mp4":                    "video/mp4",
	".mp4v":                   "video/mp4",
	".mpa":                    "video/mpeg",
	".mpe":                    "video/mpeg",
	".mpeg":                   "video/mpeg",
	".mpf":                    "application/vnd.ms-mediapackage",
	".mpg":                    "video/mpeg",
	".mpp":                    "application/vnd.ms-project",
	".mpv2":                   "video/mpeg",
	".mqv":                    "video/quicktime",
	".ms":                     "application/x-troff-ms",
	".msg":                    "application/vnd.ms-outlook",
	".msi":                    "application/octet-stream",
	".mso":                    "application/octet-stream",
	".mts":                    "video/vnd.dlna.mpeg-tts",
	".mtx":                    "application/xml",
	".mvb":                    "application/x-msmediaview",
	".mvc":                    "application/x-miva-compiled",
	".mxp":                    "application/x-mmxp",
	".nc":                     "application/x-netcdf",
	".nsc":                    "video/x-ms-asf",
	".nws":                    "message/rfc822",
	".ocx":                    "application/octet-stream",
	".oda":                    "application/oda",
	".odb":                    "application/vnd.oasis.opendocument.database",
	".odc":                    "application/vnd.oasis.opendocument.chart",
	".odf":                    "application/vnd.oasis.opendocument.formula",
	".odg":                    "application/vnd.oasis.opendocument.graphics",
	".odh":                    "text/plain",
	".odi":                    "application/vnd.oasis.opendocument.image",
	".odl":                    "text/plain",
	".odm":                    "application/vnd.oasis.opendocument.text-master",
	".odp":                    "application/vnd.oasis.opendocument.presentation",
	".ods":                    "application/vnd.oasis.opendocument.spreadsheet",
	".odt":                    "application/vnd.oasis.opendocument.text",
	".oga":                    "audio/ogg",
	".ogg":                    "audio/ogg",
	".ogv":                    "video/ogg",
	".ogx":                    "application/ogg",
	".one":                    "application/onenote",
	".onea":                   "application/onenote",
	".onepkg":                 "application/onenote",
	".onetmp":                 "application/onenote",
	".onetoc":                 "application/onenote",
	".onetoc2":                "application/onenote",
	".opus":                   "audio/ogg",
	".orderedtest":            "application/xml",
	".osdx":                   "application/opensearchdescription+xml",
	".otf":                    "application/font-sfnt",
	".otg":                    "application/vnd.oasis.opendocument.graphics-template",
	".oth":                    "application/vnd.oasis.opendocument.text-web",
	".otp":                    "application/vnd.oasis.opendocument.presentation-template",
	".ots":                    "application/vnd.oasis.opendocument.spreadsheet-template",
	".ott":                    "application/vnd.oasis.opendocument.text-template",
	".oxt":                    "application/vnd.openofficeorg.extension",
	".p10":                    "application/pkcs10",
	".p12":                    "application/x-pkcs12",
	".p7b":                    "application/x-pkcs7-certificates",
	".p7c":                    "application/pkcs7-mime",
	".p7m":                    "application/pkcs7-mime",
	".p7r":                    "application/x-pkcs7-certreqresp",
	".p7s":                    "application/pkcs7-signature",
	".pbm":                    "image/x-portable-bitmap",
	".pcast":                  "application/x-podcast",
	".pct":                    "image/pict",
	".pcx":                    "application/octet-stream",
	".pcz":                    "application/octet-stream",
	".pdf":                    "application/pdf",
	".pfb":                    "application/octet-stream",
	".pfm":                    "application/octet-stream",
	".pfx":                    "application/x-pkcs12",
	".pgm":                    "image/x-portable-graymap",
	".pic":                    "image/pict",
	".pict":                   "image/pict",
	".pkgdef":                 "text/plain",
	".pkgundef":               "text/plain",
	".pko":                    "application/vnd.ms-pki.pko",
	".pls":                    "audio/scpls",
	".pma":                    "application/x-perfmon",
	".pmc":                    "application/x-perfmon",
	".pml":                    "application/x-perfmon",
	".pmr":                    "application/x-perfmon",
	".pmw":                    "application/x-perfmon",
	".png":                    "image/png",
	".pnm":                    "image/x-portable-anymap",
	".pnt":                    "image/x-macpaint",
	".pntg":                   "image/x-macpaint",
	".pnz":                    "image/png",
	".pot":                    "application/vnd.ms-powerpoint",
	".potm":                   "application/vnd.ms-powerpoint.template.macroEnabled.12",
	".potx":                   "application/vnd.openxmlformats-officedocument.presentationml.template",
	".ppa":                    "application/vnd.ms-powerpoint",
	".ppam":                   "application/vnd.ms-powerpoint.addin.macroEnabled.12",
	".ppm":                    "image/x-portable-pixmap",
	".pps":                    "application/vnd.ms-powerpoint",
	".ppsm":                   "application/vnd.ms-powerpoint.slideshow.macroEnabled.12",
	".ppsx":                   "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
	".ppt":                    "application/vnd.ms-powerpoint",
	".pptm":                   "application/vnd.ms-powerpoint.presentation.macroEnabled.12",
	".pptx":                   "application/vnd.openxmlformats-officedocument.presentationml.presentation",
	".prf":                    "application/pics-rules",
	".prm":                    "application/octet-stream",
	".prx":                    "application/octet-stream",
	".ps":                     "application/postscript",
	".py":                     "text/plain",
	".psc1":                   "application/PowerShell",
	".psd":                    "application/octet-stream",
	".psess":                  "application/xml",
	".psm":                    "application/octet-stream",
	".psp":                    "application/octet-stream",
	".pst":                    "application/vnd.ms-outlook",
	".pub":                    "application/x-mspublisher",
	".pwz":                    "application/vnd.ms-powerpoint",
	".qht":                    "text/x-html-insertion",
	".qhtm":                   "text/x-html-insertion",
	".qt":                     "video/quicktime",
	".qti":                    "image/x-quicktime",
	".qtif":                   "image/x-quicktime",
	".qtl":                    "application/x-quicktimeplayer",
	".qxd":                    "application/octet-stream",
	".ra":                     "audio/x-pn-realaudio",
	".ram":                    "audio/x-pn-realaudio",
	".rar":                    "application/x-rar-compressed",
	".ras":                    "image/x-cmu-raster",
	".rat":                    "application/rat-file",
	".rc":                     "text/plain",
	".rc2":                    "text/plain",
	".rct":                    "text/plain",
	".rdlc":                   "application/xml",
	".reg":                    "text/plain",
	".resx":                   "application/xml",
	".rf":                     "image/vnd.rn-realflash",
	".rgb":                    "image/x-rgb",
	".rgs":                    "text/plain",
	".rm":                     "application/vnd.rn-realmedia",
	".rmi":                    "audio/mid",
	".rmp":                    "application/vnd.rn-rn_music_package",
	".roff":                   "application/x-troff",
	".rpm":                    "audio/x-pn-realaudio-plugin",
	".rqy":                    "text/x-ms-rqy",
	".rtf":                    "application/rtf",
	".rtx":                    "text/richtext",
	".rvt":                    "application/octet-stream",
	".ruleset":                "application/xml",
	".s":                      "text/plain",
	".safariextz":             "application/x-safari-safariextz",
	".scd":                    "application/x-msschedule",
	".scr":                    "text/plain",
	".sct":                    "text/scriptlet",
	".sd2":                    "audio/x-sd2",
	".sdp":                    "application/sdp",
	".sea":                    "application/octet-stream",
	".searchConnector-ms":     "application/windows-search-connector+xml",
	".setpay":                 "application/set-payment-initiation",
	".setreg":                 "application/set-registration-initiation",
	".settings":               "application/xml",
	".sgimb":                  "application/x-sgimb",
	".sgml":                   "text/sgml",
	".sh":                     "text/plain",
	".shar":                   "application/x-shar",
	".shtml":                  "text/html",
	".sit":                    "application/x-stuffit",
	".sitemap":                "application/xml",
	".skin":                   "application/xml",
	".skp":                    "application/x-koan",
	".sldm":                   "application/vnd.ms-powerpoint.slide.macroEnabled.12",
	".sldx":                   "application/vnd.openxmlformats-officedocument.presentationml.slide",
	".slk":                    "application/vnd.ms-excel",
	".sln":                    "text/plain",
	".slupkg-ms":              "application/x-ms-license",
	".smd":                    "audio/x-smd",
	".smi":                    "application/octet-stream",
	".smx":                    "audio/x-smd",
	".smz":                    "audio/x-smd",
	".snd":                    "audio/basic",
	".snippet":                "application/xml",
	".snp":                    "application/octet-stream",
	".sol":                    "text/plain",
	".sor":                    "text/plain",
	".spc":                    "application/x-pkcs7-certificates",
	".spl":                    "application/futuresplash",
	".spx":                    "audio/ogg",
	".sql":                    "text/plain",
	".src":                    "application/x-wais-source",
	".srf":                    "text/plain",
	".SSISDeploymentManifest": "text/xml",
	".ssm":                    "application/streamingmedia",
	".sst":                    "application/vnd.ms-pki.certstore",
	".stl":                    "application/vnd.ms-pki.stl",
	".sv4cpio":                "application/x-sv4cpio",
	".sv4crc":                 "application/x-sv4crc",
	".svc":                    "application/xml",
	".svg":                    "image/svg+xml",
	".swf":                    "application/x-shockwave-flash",
	".step":                   "application/step",
	".stp":                    "application/step",
	".t":                      "application/x-troff",
	".tar":                    "application/x-tar",
	".tcl":                    "application/x-tcl",
	".testrunconfig":          "application/xml",
	".testsettings":           "application/xml",
	".tex":                    "application/x-tex",
	".texi":                   "application/x-texinfo",
	".texinfo":                "application/x-texinfo",
	".tgz":                    "application/x-compressed",
	".thmx":                   "application/vnd.ms-officetheme",
	".thn":                    "application/octet-stream",
	".tif":                    "image/tiff",
	".tiff":                   "image/tiff",
	".tlh":                    "text/plain",
	".tli":                    "text/plain",
	".toc":                    "application/octet-stream",
	".tr":                     "application/x-troff",
	".trm":                    "application/x-msterminal",
	".trx":                    "application/xml",
	".ts":                     "video/vnd.dlna.mpeg-tts",
	".tsv":                    "text/tab-separated-values",
	".ttf":                    "application/font-sfnt",
	".tts":                    "video/vnd.dlna.mpeg-tts",
	".txt":                    "text/plain",
	".u32":                    "application/octet-stream",
	".uls":                    "text/iuls",
	".user":                   "text/plain",
	".ustar":                  "application/x-ustar",
	".vb":                     "text/plain",
	".vbdproj":                "text/plain",
	".vbk":                    "video/mpeg",
	".vbproj":                 "text/plain",
	".vbs":                    "text/vbscript",
	".vcf":                    "text/x-vcard",
	".vcproj":                 "application/xml",
	".vcs":                    "text/plain",
	".vcxproj":                "application/xml",
	".vddproj":                "text/plain",
	".vdp":                    "text/plain",
	".vdproj":                 "text/plain",
	".vdx":                    "application/vnd.ms-visio.viewer",
	".vml":                    "text/xml",
	".vscontent":              "application/xml",
	".vsct":                   "text/xml",
	".vsd":                    "application/vnd.visio",
	".vsi":                    "application/ms-vsi",
	".vsix":                   "application/vsix",
	".vsixlangpack":           "text/xml",
	".vsixmanifest":           "text/xml",
	".vsmdi":                  "application/xml",
	".vspscc":                 "text/plain",
	".vss":                    "application/vnd.visio",
	".vsscc":                  "text/plain",
	".vssettings":             "text/xml",
	".vssscc":                 "text/plain",
	".vst":                    "application/vnd.visio",
	".vstemplate":             "text/xml",
	".vsto":                   "application/x-ms-vsto",
	".vsw":                    "application/vnd.visio",
	".vsx":                    "application/vnd.visio",
	".vtx":                    "application/vnd.visio",
	".wav":                    "audio/wav",
	".wave":                   "audio/wav",
	".wax":                    "audio/x-ms-wax",
	".wbk":                    "application/msword",
	".wbmp":                   "image/vnd.wap.wbmp",
	".wcm":                    "application/vnd.ms-works",
	".wdb":                    "application/vnd.ms-works",
	".wdp":                    "image/vnd.ms-photo",
	".webarchive":             "application/x-safari-webarchive",
	".webm":                   "video/webm",
	".webp":                   "image/webp", /* https"://en.wikipedia.org/wiki/WebP */
	".webtest":                "application/xml",
	".wiq":                    "application/xml",
	".wiz":                    "application/msword",
	".wks":                    "application/vnd.ms-works",
	".WLMP":                   "application/wlmoviemaker",
	".wlpginstall":            "application/x-wlpg-detect",
	".wlpginstall3":           "application/x-wlpg3-detect",
	".wm":                     "video/x-ms-wm",
	".wma":                    "audio/x-ms-wma",
	".wmd":                    "application/x-ms-wmd",
	".wmf":                    "application/x-msmetafile",
	".wml":                    "text/vnd.wap.wml",
	".wmlc":                   "application/vnd.wap.wmlc",
	".wmls":                   "text/vnd.wap.wmlscript",
	".wmlsc":                  "application/vnd.wap.wmlscriptc",
	".wmp":                    "video/x-ms-wmp",
	".wmv":                    "video/x-ms-wmv",
	".wmx":                    "video/x-ms-wmx",
	".wmz":                    "application/x-ms-wmz",
	".woff":                   "application/font-woff",
	".wpl":                    "application/vnd.ms-wpl",
	".wps":                    "application/vnd.ms-works",
	".wri":                    "application/x-mswrite",
	".wrl":                    "x-world/x-vrml",
	".wrz":                    "x-world/x-vrml",
	".wsc":                    "text/scriptlet",
	".wsdl":                   "text/xml",
	".wvx":                    "video/x-ms-wvx",
	".x":                      "application/directx",
	".xaf":                    "x-world/x-vrml",
	".xaml":                   "application/xaml+xml",
	".xap":                    "application/x-silverlight-app",
	".xbap":                   "application/x-ms-xbap",
	".xbm":                    "image/x-xbitmap",
	".xdr":                    "text/plain",
	".xht":                    "application/xhtml+xml",
	".xhtml":                  "application/xhtml+xml",
	".xla":                    "application/vnd.ms-excel",
	".xlam":                   "application/vnd.ms-excel.addin.macroEnabled.12",
	".xlc":                    "application/vnd.ms-excel",
	".xld":                    "application/vnd.ms-excel",
	".xlk":                    "application/vnd.ms-excel",
	".xll":                    "application/vnd.ms-excel",
	".xlm":                    "application/vnd.ms-excel",
	".xls":                    "application/vnd.ms-excel",
	".xlsb":                   "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
	".xlsm":                   "application/vnd.ms-excel.sheet.macroEnabled.12",
	".xlsx":                   "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
	".xlt":                    "application/vnd.ms-excel",
	".xltm":                   "application/vnd.ms-excel.template.macroEnabled.12",
	".xltx":                   "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
	".xlw":                    "application/vnd.ms-excel",
	".xml":                    "text/xml",
	".xmp":                    "application/octet-stream",
	".xmta":                   "application/xml",
	".xof":                    "x-world/x-vrml",
	".XOML":                   "text/plain",
	".xpm":                    "image/x-xpixmap",
	".xps":                    "application/vnd.ms-xpsdocument",
	".xrm-ms":                 "text/xml",
	".xsc":                    "application/xml",
	".xsd":                    "text/xml",
	".xsf":                    "text/xml",
	".xsl":                    "text/xml",
	".xslt":                   "text/xml",
	".xsn":                    "application/octet-stream",
	".xss":                    "application/xml",
	".xspf":                   "application/xspf+xml",
	".xtp":                    "application/octet-stream",
	".xwd":                    "image/x-xwindowdump",
	".z":                      "application/x-compress",
	".zip":                    "application/zip"}

//get extension by name. lowercase.
func GetExtension(filename string) string {

	var extension = filepath.Ext(filename)

	return strings.ToLower(extension)

}

//get filename without extension
func GetSimpleFileName(filename string) string {

	for i := len(filename) - 1; i >= 0 && !os.IsPathSeparator(filename[i]); i-- {
		if filename[i] == '.' {
			return filename[:i]
		}
	}
	return filename

}

//get MimeType by filename, if not found return "application/octet-stream"
func GetMimeType(filename string) string {

	extension := GetExtension(filename)

	if mimeType, ok := allMimeMap[extension]; ok {
		return mimeType
	} else {
		return "application/octet-stream"
	}
}

//get MimeType by filename, if not found return fallback.
func GetFallbackMimeType(filename string, fallback string) string {

	extension := GetExtension(filename)

	if mimeType, ok := allMimeMap[extension]; ok {
		return mimeType
	} else {
		return fallback
	}
}
